Généralités

Quelques mots clé : Serveur, Automatisation, Playbook, Centralisation, Administration, Stratégie, Sans agent, Idempotent

SSH, Win RM → sur Windows. (Penser Sécurisation avec authentification par clé publique c.f 1.1)

Cible : OS, les EAR, des conteneurs. (Linux, Windows, Eléments actifs du réseau → Switch / Routeur, Conteneur Docker.)

Fonctionnalité → Stateless PushBased → D’une exécution à l’autre ansible oublie la configuration. Provisionning : Création de la machine (ressources physique de la machine.) → Suppression de la machine de la supervision.

Gestion des configurations → Politique / accès.

Différence entre automatisation et orchestration Auto → sur un poste Orchestration → Sur de multiple serveurs (différent)

Si cela peut être codé, cela peut être automatisé !!

Authentification par clé ssh

Génération des clé ssh :

$ssh-keygen

Copie de la clé publique ssh sur le client :

ssh-copy-id <utilisateur>@10.1.1.111

Liste des modules (au nombre 450 au moment de l’écriture de cette documentation) https://docs.ansible.com/ansible/latest/modules/list_of_all_modules.html?highlight=modules

Commandes en CLI

ansible-playbook <nom du playbook.yml>

Schéma d’infrastructure

Table 1. Adressage de l’infrastructure
Client cible Serveur Ansible Adresse IP Publique (point d’entré)

10.1.1.111

10.1.1.110

109.238.4.12

infra

VPC : Virtual Private Cloud

L’ensemble de l’infrastructure utilisée dans ces différents TP est hébergée dans un cloud (IKOULA), chaque élève de la section se connecte avec l’adresse IP publique du routeur et un numéro de port. L’adresse IP publique permet l’entrée sur l’infrastructure Cloud et le numéro de port (redirigé en SSH) permet l’accès à la machine virtuelle correspondante. Le nombre d’élève dans la section étant de 16 à compter de deux machines par élève, il y a donc 32 machines virtuelles derrière le routeur VPC.

Fonctionnement

  • L’inventaire des hôtes peut être renseigné dans le fichier /etc/ansible/hosts ou dans un fichier externe à l’arborescenc, nous pouvont configuré par exemple un fichier d’inventaire par clients, chaque client ayant une liste de serveur cibles sur lesquelles Ansible pourra déclancher des tâches automatisée.

Rédaction d’un playbook

Exemple installation et configuration du serveur Apache sur le groupe "ansiblecli"

---
- hosts: ansiblecli
  become: true
  vars:
    dest: "/var/www/site/"
  tasks:
    - name: "Créer le répertoire de destination"
      file:
        path: "{{ dest }}"
        state: directory
        mode: 0755
    - name: Installation de git (dernière version)
      yum:
        name: git
        state: latest
  • Commentaire sur le fonctionnment de ce Playbook :

    • Il s’applique sur le ou les hôtes renseignés dans le groupe "ansiblecli"

    • Il s’exécute en tant qu’administrateur (become: true)

    • Ce script a la tâche de créer un repertoire de destination (site) dans l’arborescence existante /var/www et de définir les droits appliqués sur celui-ci.

    • Le script termine avec l’installation du package GIT pour la récupération d’éventuels dépôts sur des GIT projets.

1. Editeur VIM (Vi) - Commandes

  • Enregistrer le fichier et quitter l’éditeur :wq ou :x

  • Quitter VI passer outre le message sans enregistrer : q !

  • Copie de ligne :xyy

  • Annuler une documentation :u

  • En dehors du mode insertion → IAO = dépassement du curseur

  • Recherche en dehors du mode insertion : /<valeur recherchée>

  • Afficher les numéros de ligne dans l’éditeur (extérieur au mode insertion) : set nu

2. Methode: documentation

2.1. Coder sa documentation (Logiciel ASCIIdocFX)

  • DAS → Doc As Code

  • Phylosophie de documentation

  • Languages : Markdown, reStructuredText, AsciiDoc (2002)

  • Favoriser le contenu avant la forme.

  • Mise en place d’un travail collaboratif (GIT) : Gestion des versions.

  • Permet d’utiliser un simple éditeur de texte.

2.2. Instaurer un versioning de la documentation et projets (GIT)

  • Créer un compte sur FramaGit.

GIT
  • Installer GIT sur la machine (sous linux)

$sudo yum install git
  • Clonage d’un dépôt git (master)

$git clone  https://framagit.org/alemorvan/coursaftec.git
  • Changement de branche à partir du master sur la branche TSSR

$git checkout TSSR
  • Création d’une branche

$git branch cmuller
  • Effectuer des modification → Création d’un fichier

$git touch cmuller.adoc
  • Ajouter le fichier créer au dépôt git

$git add cmuller.adoc
  • Renseigner le changment pour traçabilité

$git commit -m "Ajout du fichier cmuller.adoc"
  • Publication de la modification effectuée

$git push --set-upstream origin cmuller

3. Méthodologie de travail

  • Scrum

4. Terraform

  • IAC → Infrastructure As Code. → Langage HCL = code versionné → Mettre en place une infrastructure flexible : allocation des ressources à une période donnée = Scalabilité = Mise à l’échelle.

Attention au fichier terraform.tfstate (Contient la clé privée) ! Ne pas le diffuser publiquement, mais à partager en équipe.

Créer un playbook pour récupérer les données d’inventaire (Ex: adresse IP) pour connecter une machine au réseau. - Attention auficher terraform.tfvars → Ne pas publier en ligne, d’autre personne peuvent accéder à votre Infra.

4.1. Créer une machine virtuelle avec Terraform

Créer le fichier terraform.tfvars Dans ce fichier texte sont contenu les clé d’API pour la connexion à l’infrastructure.

cd /home/aftec/

mkdir terra

cd terra/

wget https://releases.hashicorp.com/terraform/0.11.11/terraform_0.11.11_linux_amd64.zip

unzip terraform_0.11.11_linux_amd64.zip
api_url="https://cloudstack.ikoula.com/client/api"
api_key="NbUskRAvhRHxPHGwxBVyat74YSM7D8K5c-O2ETRkHNKnDnd1x5Vx7hWBQd-4rbSovvK76D3i2yyHNxoM1Jt***"
secret_key="lPccYAF2e16P0XtBfnYaVq5X-YZK0i6Tz8QrzvB0qAGTrQhihqt77pq-c1PuOuAGlL4OqlbahmyuFlNacep***"

Créer le fichier instance .tf Dans ce fichier son contenu les différents paramètres de configuration de la machine vituelle créer.

variable "api_url" {
    type = "string"
    default = ""
}

variable "api_key" {
    type = "string"
    default = ""
}

variable "secret_key" {
    type = "string"
    default = ""
}

# Configure the CloudStack Provider
provider "cloudstack" {
  api_url    = "${var.api_url}"
  api_key    = "${var.api_key}"
  secret_key = "${var.secret_key}"
}

resource "cloudstack_instance" "ServeurCoreM" {
  zone = "EU-FR-IKDC2-Z5-BASIC"
  service_offering = "t1.pico"
  template = "CentOS 7 - Minimal - 64bits"
  name = "serveurCoreM"
  expunge = "true"
}

Commandes de déploiement de la vm

./terraform init
./terraform plan
./terraform apply

Paramètres de la machine crée

cloudstack_instance.ServeurCoreM: Creating...
  display_name:     "" => "<computed>"
  expunge:          "" => "true"
  group:            "" => "<computed>"
  ip_address:       "" => "<computed>"
  name:             "" => "serveurCoreM"
  network_id:       "" => "<computed>"
  project:          "" => "<computed>"
  root_disk_size:   "" => "<computed>"
  service_offering: "" => "t1.pico"
  start_vm:         "" => "true"
  template:         "" => "CentOS 7 - Minimal - 64bits"
  zone:             "" => "EU-FR-IKDC2-Z5-BASIC"

Valeur <computed> = valeur calculée

Ajouter des fonctionnalités à la machine virtuelle

  • SSH

  • Ouvrir le pare-feu

Supprimer la machine virtuelle

./terraform destroy

5. Remerciements

Je tiens à remercier Antoine Le Morvan, pour ces trois jours de cours très instructifs.